package com.zmx.clothes.service;

import com.zmx.clothes.pojo.*;
import javafx.geometry.Pos;
import org.apache.ibatis.annotations.Delete;

import java.sql.Time;
import java.util.Date;
import java.util.List;

/**
 * 人事经理service
 */
public interface PMService {

    /**
     * 通过员工id查询出员工的职位信息
     * @param id
     * @return
     */
    public Position selPosByEmpId(Integer id);

    /**
     * 更新员工信息
     * @param employee
     * @return
     */
    public int updEmpById(Employee employee);

    /**
     * 查询出所有的职位信息
     * @return
     */
    public List<Position> selAllPos();

    /**
     * 添加一个部门
     * @param department
     * @return
     */
    int addDept(Department department);

    /**
     * 通过部门id查询出一个部门信息
     * @param id
     * @return
     */
    public Department selDeptById(Integer id);

    /**
     * 通过部门id修改部门
     * @param department
     * @return
     */
    int updDeptById(Department department);

    /**
     * 通过员工工号查询员工id
     * @param username
     * @return
     */
    Integer selEmpIdByEmpUsername(String username);

    /**
     * 删除一个部门
     * @param department
     * @return
     */
    int delDeptById(Department department);

    /**
     * 根据id查询出职位信息
     * @param id
     * @return
     */
    Position selPosById(Integer id);

    /**
     * 根据id修改职位信息
     * @param position
     * @return
     */
    int updPosById(Position position);

    /**
     * 根据id删除职位信息
     * @param position
     * @return
     */
    int delPositionById(Position position);

    /**
     * 添加一条职位信息
     * @param position
     * @return
     */
    int addPos(Position position);

    /**
     * 添加一条新入职员工信息
     * @param employee
     * @return
     */
    int addEmp(Employee employee);

    /**
     * 查询出空缺职位信息
     * @return
     */
    List<Position> selEmptyPos();

    /**
     * 查询出没有职位的员工
     * @return
     */
    List<Employee> selNOPosEmp();

    /**
     * 根据员工id查询出员工信息
     * @param id
     * @return
     */
    Employee selEmpById(Integer id);

    /**
     * 给入职员工分配职位
     * @param id
     * @param eId
     * @return
     */
    Integer updPosEId(Integer id, Integer eId);

    /**
     * 查出经过总经理同意的离职请求
     * @return
     */
    public List<PositionChange> selAllLeaveAfterGMAgree();

    /**
     * 查找经过总经理同意的调岗请求
     * @return
     */
    public List<PositionChange> selAllPCAfterGMAgree();

    /**
     * 人事经理处理员工离职
     * @param pcId
     * @param effectTime
     * @return
     */
    public int pmDealEmpLeave(Integer pcId, Date effectTime);

    /**
     * 人事经理处理员工调岗
     * @param pcId
     * @param effectTime
     * @return
     */
    public int pmDealEmpPosChange(Integer pcId, Date effectTime);

    /**
     * 人事经理员工请假情况
     * @return
     */
    public List<Request> selAllReqsByDMAgree();

    /**
     * 人事经理查看员工考勤状况
     * @return
     */
    public List<Checking> selAllCheck();

    /**
     * @param morningCheckLast
     * @param eveningCheckFirst
     * @return
     */
    int gmSettingCheckTiming(String morningCheckLast, String eveningCheckFirst);

    /**
     * 查询考勤时间设置
     * @return
     */
    CheckSetting selCS();

    /**
     * 人事经理查询某一天的考勤记录
     * @param eId
     * @param nowDate
     * @return
     */
    List<Checking> selChecksByPersonnelDay(Integer eId, String nowDate);


    /**
     * 人事经理查询某一段时间的考勤记录
     * @param eId
     * @param startTime
     * @param endTime
     * @return
     */
    List<Checking> selChecksByPersonnelDate(Integer eId, String startTime, String endTime);

    /**
     * 人事经理查询某一天的请假记录
     * @param eId
     * @param nowDate
     * @return
     */
    List<Request> selRequestsByPersonnelDay(Integer eId, String nowDate, String status);


    /**
     * 人事经理查询某一段时间的请假记录
     * @param eId
     * @param startTime
     * @param endTime
     * @return
     */
    List<Request> selRequestsByPersonnelDate(Integer eId, String startTime, String endTime, String status);

}
